/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import java.util.List;
import unidadeMedida.CadastroUnidadeMedida;
import unidadeMedida.RepositorioUnidadeMedida;
import unidadeMedida.UnidadeMedida;
import unidadeMedida.UnidadeMedidaNaoCadastradoException;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author PauloM
 */
public class ControladorUnidadeMedida {

 private RepositorioUnidadeMedida objRepositorioUnidadeMedida = null;

    public ControladorUnidadeMedida(RepositorioUnidadeMedida objRepositorioUnidadeMedida) {
        this.objRepositorioUnidadeMedida = objRepositorioUnidadeMedida;
    }

    /**
     *
     * @param objRepositorioUnidadeMedida
     * @throws ErroAcessoRepositorioException
     */

    public void Cadastrar(UnidadeMedida objUnidadeMedida) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroUnidadeMedida objCadastroUnidadeMedida = new CadastroUnidadeMedida(this.objRepositorioUnidadeMedida);

        if (objUnidadeMedida.getDescricaoUnidade().trim().length() == 0)
            throw new CamposObrigatoriosException("Descrição Unidade de Medida Não informada");

        // Salvando no banco
        objCadastroUnidadeMedida.cadastrarAtualizar(objUnidadeMedida);
    }

    /**
     * Metodo que ira cadastrar o UnidadeMedida
     *
     * @param UnidadeMedida objUnidadeMedida
     * @return void
     */

    public void Atualizar(UnidadeMedida objUnidadeMedida) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroUnidadeMedida objCadastroUnidadeMedida = new CadastroUnidadeMedida(this.objRepositorioUnidadeMedida);


        // Casts Necessários
        int idUnidadeMedida = (int) objUnidadeMedida.getIdUnidadeMedida();
        
        // Validações
        if (objUnidadeMedida.getDescricaoUnidade().trim().length() == 0)
            throw new CamposObrigatoriosException("Descrição Unidade de Medida Não informada");

        if(idUnidadeMedida == 0)
            throw new CamposObrigatoriosException("Identificador Unidade de Medida Não informada");

                
        // Salvando no banco
        objCadastroUnidadeMedida.cadastrarAtualizar(objUnidadeMedida);

    }

    /**
     * Metodo que ira produrar a UnidadeMedida
     *
     * @param int idUnidadeMedida
     * @return void
     */

    public UnidadeMedida procurar(int idUnidadeMedida) throws UnidadeMedidaNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroUnidadeMedida objCadastroUnidadeMedida = new CadastroUnidadeMedida(this.objRepositorioUnidadeMedida);

        // Realizando casts
       idUnidadeMedida = (int) idUnidadeMedida;
       // validando
        if(idUnidadeMedida == 0) throw new CamposObrigatoriosException("Codigo Unidade de Medida já existe.");

        // Salvando no banco
        return objCadastroUnidadeMedida.procurar(idUnidadeMedida);

    }

    /**
     * Metodo que ira verificar a existência da UnidadeMedida
     *
     * @param int idUnidadeMedida
     * @return void
     */

    public boolean existe(int idUnidadeMedida) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroUnidadeMedida objCadastroUnidadeMedida = new CadastroUnidadeMedida(this.objRepositorioUnidadeMedida);

       // Realizando casts
       idUnidadeMedida = (int) idUnidadeMedida;
       // validando
        if(idUnidadeMedida == 0) throw new CamposObrigatoriosException("Codigo Unidade de Medida já existe.");

        // Salvando no banco
         return objCadastroUnidadeMedida.existe(idUnidadeMedida);
    }

    /**
     * Metodo que ira listar os UnidadeMedidas
     *
     * @return Collection
     */
    public List<UnidadeMedida> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroUnidadeMedida objCadastroUnidadeMedida = new   CadastroUnidadeMedida(this.objRepositorioUnidadeMedida);

       return objCadastroUnidadeMedida.listar(strComplemento);
    }

    /**
     * Método que ira remover o UnidadeMedida do banco
     *
     * @param idUnidadeMedida
     */
    public void remover(int idUnidadeMedida) throws UnidadeMedidaNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroUnidadeMedida objCadastroUnidadeMedida = new CadastroUnidadeMedida(objRepositorioUnidadeMedida);

       // Realizando casts
       idUnidadeMedida = (int) idUnidadeMedida;
       // validando
        if(idUnidadeMedida == 0) throw new CamposObrigatoriosException("Codigo Unidade de Medida já existe.");

       objCadastroUnidadeMedida.remover(idUnidadeMedida);
    }
}


